import { ResourceType } from "@/enums/ResourceType.ts";
import React from "react";
import { Dayjs } from "dayjs";
import defaultConfig from "@/config/config.default.tsx";
import merge from "lodash.merge";

/**
 *  资源弹窗定义
 */
interface ResourceModalProp { //资源类型、与resources中的一致
    title: string,//弹窗标题 可通过{}占位符设置值
    tag?: string,//标题后跟着的tag内容  可通过{}占位符设置值
    tabs: { //弹窗页签
        url: string,//在web-cyjc3-public中 弹窗内容url  可通过{}传值
        label?: string, // tab标题 当tabs只有一个时可以不配
        height: number | string //为number时单位为rem
    }[]
}

/**
 * 弹窗map
 */
type ResourceModalMap = {
    Default?: ResourceModalProp; // 默认modal配置
} & {
        [key in ResourceType]?: ResourceModalProp; // 根据 ResourceType 进行映射
    };

interface RewriteRequest {
    getLevelPie: any
}

/**
 * 应用配置定义
 */
export interface ApplicationConfig {
    /**
     * routes/map.ts下页面
     * mapLayout下以地图为底的页面配置
     */
    map: {
        key?: string;    //高德地图应用key
        securityJsCode?: string;     //高德地图应用jsCode
        mapStyle?: string;  //高德地图自定义style
        zoom?: number;   //地图初始化zoom
        center?: number[];    //地图中心点
        components: {
            /**
             *  资源一张图页面配置
             *  地址 /map/resource
             */
            resource?: {
                types: ResourceType[],//资源界面展示的资源类型
                modals: ResourceModalMap,//资源界面弹窗配置
                request?: RewriteRequest
            }
            /**
             * 景区监测地图页面配置
             * 注：此页面的弹窗与resource中的modals配置保持一致
             * /map/scenic
             */
            scenic?: {
                marker: { //景区地图marker配置
                    render: (item: any) => React.ReactElement //内容渲染
                    offsetHeight: number // marker高度偏移量
                }
            }
        },
    },
    analyse?: {//analyseLayout下分析页面
        scenicTourist?: {// /analyse/scenic-tourist 景区客流分析页面配置
            defaultScopeValue?: {//各scope默认初始化的时间，如month为切换到月份时的默认时间
                date?: Dayjs,
                month?: Dayjs,
                year?: Dayjs,
                quarter?: Dayjs,
            },
            defaultValues?: {//初始化时间
                scope: 'date' | 'month' | 'year' | 'holiday' | 'quarter' | 'custom',
                date: Dayjs,
            }
        },
        globalTourist?: {// /analyse/global-tourist 全域客流分析页面配置
            defaultScopeValue?: {//各scope默认初始化的时间，如month为切换到月份时的默认时间
                date?: Dayjs,
                month?: Dayjs,
                year?: Dayjs,
                quarter?: Dayjs,
            },
            defaultValues?: {//初始化时间
                scope: 'date' | 'month' | 'year' | 'holiday' | 'quarter' | 'custom',
                date: Dayjs,
            }
        },
        scenicComment?: {// /analyse/scenic-comment 景区客流分析页面配置
            defaultScopeValue?: {//各scope默认初始化的时间，如month为切换到月份时的默认时间
                all?: Dayjs,
                month?: Dayjs,
                year?: Dayjs,
                quarter?: Dayjs,
            },
            defaultValues?: {//初始化时间
                scope: 'all' | 'date' | 'month' | 'year' | 'holiday' | 'quarter' | 'custom',
                date: Dayjs,
            }
        },
    }
}

export interface ApplicationConfigMap {
    [applicationId: string]: ApplicationConfig
}

export const defineAppConfig: (applicationId: string, config: ApplicationConfig) => ApplicationConfigMap = (applicationId, config) => {
    return { [applicationId]: merge({}, defaultConfig, config) }
}